package com.cskaoyan.javase.basic._3operation;

/**
 * 三目运算符,也叫三元运算符,指的是能够连接三个操作数(表达式)的一种运算符
 * 三目运算符实际开发用途不多,但有自己很独特的用途,属于重要但不常见的知识点
 *
 * 语法:
 * (条件表达式) ? 表达式1 : 表达式2;
 * 条件表达式的结果是布尔类型,如果结果是true就执行表达式一
 * 如果结果是false,那就执行表达式二
 * 这意味着三元运算符组成的表达式,最终一定会执行一个表达式,一定是有一个结果的
 * 这是三目运算符最大的特点.
 * 三目运算符表示一种选择,对应后面学习的if...else
 *
 * 三目运算符 vs if...else
 *  三目运算符的优点:
 *      相比于if...else代码的层级更少,代码更简洁优雅
 *      除此之外,三目运算符还比if...else的执行效率高
 *  三目运算符的缺点:
 *      三目运算符一定要有结果,一定执行表达式,那么如果需求里不存在表达式,那么就不能使用三目运算符了
 *      而if...else没有这个限制
 *
 * 总之,if...else的使用场景更广泛,但是如果同时能够使用if...else和三目运算符,要尽量使用三目运算符,因为它足够简洁高效.
 *
 *
 * @since 17:27
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo4 {
    public static void main(String[] args) {
        // 需求:求两个数的最大值 使用三目运算符
        int num1 = 10;
        int num2 = 20;
        // 对照语法,比这葫芦画葫芦
        int max = (num1 > num2) ? num1 : num2;
        System.out.println(max);

        // 需求:求两个数的最大值 使用if...else
        int max2;
        // 代码中一旦有大括号,代码的层级就会变多,代码的可读性就会更差,而且代码复杂了也就不优雅了
        if (num1 > num2) {
            max2 = num1;
        } else {
            max2 = num2;
        }
        System.out.println(max2);

        // 需求:求两个数的最大值,但是要求直接输出
        // (num1 > num2) ? sout : num2;
        if (num1 > num2) {
            System.out.println(num1);
        } else {
            System.out.println(num2);
        }

        // 需求2: 求三个数最大值
        // 可以考虑嵌套三目运算符
        int num3 = 30;
        /*
            三目运算符比较简洁,还可以嵌套使用,但是实际开发中,出于代码可读性考虑
            建议不要嵌套三目运算符,了不起,最多嵌套一层
            再多就不合适
         */
        int max3 = (num1 > num2) ? ((num1 > num3) ? num1 : num3) : ((num2 > num3) ? num2 : num3);
        System.out.println(max3);

    }
}
